/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict'

// Task service
angular.module('flowableApp').service('FormService', [
  '$http',
  '$q',
  function ($http, $q) {
    var httpAsPromise = function (options) {
      var deferred = $q.defer()
      $http(options)
        .success(function (response, status, headers, config) {
          deferred.resolve(response)
        })
        .error(function (response, status, headers, config) {
          deferred.reject(response)
        })
      return deferred.promise
    }

    this.getTaskForm = function (taskId) {
      return httpAsPromise({
        method: 'GET',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/task-forms/' + taskId
      })
    }

    this.completeTaskForm = function (taskId, data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/task-forms/' + taskId,
        data: data
      })

      return promise
    }

    this.saveTaskForm = function (taskId, data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/task-forms/' + taskId + '/save-form',
        data: data
      })

      return promise
    }

    this.getStartForm = function (processDefinitionId) {
      return httpAsPromise({
        method: 'GET',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/process-definitions/' + processDefinitionId + '/start-form'
      })
    }

    this.completeStartForm = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        // url: FLOWABLE.CONFIG.contextRoot + '/app/rest/process-instances/',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/start-process-instances/',
        data: data
      })

      return promise
    }

    this.getCaseStartForm = function (caseDefinitionId) {
      return httpAsPromise({
        method: 'GET',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/case-definitions/' + caseDefinitionId + '/start-form'
      })
    }

    this.completeCaseStartForm = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/case-instances/',
        data: data
      })

      return promise
    }
    //判断是否出现保存草稿按钮
    this.isCanSave = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/app/isCanSaveDraf/' + data.taskId,
        data: data
      })

      return promise
    }
    //保存草稿
    this.draftProcessInstances = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/app/rest/draft-process-instances',
        data: data
      })
      return promise
    }
    //审批同意
    this.agreeTask = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/taskFormResourceExt/completeTaskForm',
        data: data
      })
      return promise
    }
    //获取驳回节点数据
    this.getTaskNodeName = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processInstanceBack/getTaskNodeName',
        data: data
      })
      return promise
    }
    //驳回
    this.rejectTask = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processInstanceBack/back',
        data: data
      })
      return promise
    }
    //判断能否撤销
    this.isCancel = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processInstanceBack/isCancel',
        data: data
      })
      return promise
    }
    //确认撤销
    this.recallTask = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processInstanceBack/cancel',
        data: data
      })
      return promise
    }
    //转办
    this.turnToTask = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/taskFormResourceExt/turnToTask',
        data: data
      })
      return promise
    }
    //终止流程实例
    this.stopProcessInstance = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processManagement/stopProcessInstance',
        data: data
      })
      return promise
    }
    //获取转办人列表
    this.getFilteredUsersCRC = function (filterText, taskId, processInstanceId) {
      var params = {
        condition: {
          userName: filterText
        },
        pageNum: 1,
        pageSize: 100
      }

      return httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.adminContextRoot + '/userCenter/userList',
        data: params
      })
    }
    //加签
    this.addExecution = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url:
          FLOWABLE.CONFIG.contextRoot +
          '/multi/addExecution/' +
          data.nodeId +
          '/' +
          data.proInstId +
          '/' +
          data.assignee,
        data: data
      })
      return promise
    }
    //减签
    this.delExecution = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url:
          FLOWABLE.CONFIG.contextRoot +
          '/multi/delExecution/' +
          data.processInstanceId +
          '/' +
          data.excutionId +
          '/' +
          data.complated,
        data: data
      })
      return promise
    }
    //挂起
    this.suspendProcessInstance = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processManagement/suspendProcessInstance',
        data: data
      })
      return promise
    }
    //激活
    this.activateProcessInstance = function (data) {
      var promise = httpAsPromise({
        method: 'POST',
        url: FLOWABLE.CONFIG.contextRoot + '/processManagement/activateProcessInstance',
        data: data
      })
      return promise
    }
  }
])
